home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 51 / Amiga Format CD51 (2000-03-10)(Future Publishing)(GB)[!][issue 2000-04].iso / -in_the_mag- / workbench / term_4.8 / extras / source / term-source.lha / ImportPanel.c < prev    next >
C/C++ Source or Header  |  1997-03-11  |  5KB  |  228 lines

  1. /*
  2. **    ImportPanel.c
  3. **
  4. **    Editing panel for phone unit settings
  5. **
  6. **    Copyright © 1990-1997 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. **
  9. **    :ts=4
  10. */
  11.  
  12. #ifndef _GLOBAL_H
  13. #include "Global.h"
  14. #endif
  15.  
  16. enum    {    GAD_LIST=1,GAD_REPLACE,GAD_APPEND,GAD_CANCEL };
  17.  
  18. BOOL
  19. ImportPanel(struct Window *Parent,PhonebookHandle *PhoneHandle,PhoneEntry *Entry,struct List *TimeDateList)
  20. {
  21.     BOOL             MadeChanges = FALSE;
  22.     struct List        *PhoneList;
  23.     LayoutHandle    *Handle;
  24.  
  25.     if(!(PhoneList = CreateRegularPhoneList(PhoneHandle)))
  26.     {
  27.         DisplayBeep(Parent->WScreen);
  28.         return(FALSE);
  29.     }
  30.  
  31.     if(!TimeDateList)
  32.         TimeDateList = (struct List *)&Entry->TimeDateList;
  33.  
  34.     if(Handle = LT_CreateHandleTags(Parent->WScreen,
  35.         LAHN_LocaleHook,    &LocaleHook,
  36.     TAG_DONE))
  37.     {
  38.         struct Window *PanelWindow;
  39.  
  40.         LT_New(Handle,
  41.             LA_Type,    VERTICAL_KIND,
  42.         TAG_DONE);
  43.         {
  44.             LT_New(Handle,
  45.                 LA_Type,    VERTICAL_KIND,
  46.             TAG_DONE);
  47.             {
  48.                 LONG Index,MaxHeight,NumEntries;
  49.                 PhoneNode *Node;
  50.  
  51.                 for(Index = -1, NumEntries = 0, Node = (PhoneNode *)PhoneList->lh_Head ; Node->Node.ln_Succ ; Node = (PhoneNode *)Node->Node.ln_Succ, NumEntries++)
  52.                 {
  53.                     if(Node->Entry == Entry)
  54.                         Index = NumEntries;
  55.                 }
  56.  
  57.                 if(NumEntries < 10)
  58.                     MaxHeight = 10;
  59.                 else
  60.                 {
  61.                     if(NumEntries > 20)
  62.                         MaxHeight = 20;
  63.                     else
  64.                         MaxHeight = NumEntries;
  65.                 }
  66.  
  67.                 LT_New(Handle,
  68.                     LA_Type,        LISTVIEW_KIND,
  69.                     LA_LabelID,        MSG_V36_0088,
  70.                     LA_ID,            GAD_LIST,
  71.                     LA_Chars,        50,
  72.                     LALV_Lines,        10,
  73.                     LALV_Link,        NIL_LINK,
  74.                     LALV_CursorKey,    TRUE,
  75.                     LALV_MaxGrowY,    MaxHeight,
  76.                     LALV_ResizeY,    TRUE,
  77.                     GTLV_Selected,    Index,
  78.                     GTLV_Labels,    PhoneList,
  79.                     GTLV_MaxPen,    GetListMaxPen(Handle->DrawInfo->dri_Pens),
  80.                 TAG_DONE);
  81.  
  82.                 LT_EndGroup(Handle);
  83.             }
  84.  
  85.             LT_New(Handle,
  86.                 LA_Type,VERTICAL_KIND,
  87.             TAG_DONE);
  88.             {
  89.                 LT_New(Handle,
  90.                     LA_Type,        XBAR_KIND,
  91.                     LAXB_FullSize,    TRUE,
  92.                 TAG_DONE);
  93.  
  94.                 LT_EndGroup(Handle);
  95.             }
  96.  
  97.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  98.                 LAGR_Spread,    TRUE,
  99.             TAG_DONE);
  100.             {
  101.                 LT_New(Handle,
  102.                     LA_Type,        BUTTON_KIND,
  103.                     LA_LabelID,        MSG_IMPORTPANEL_REPLACE_RATES_GAD,
  104.                     LA_ID,            GAD_REPLACE,
  105.                     GA_Disabled,    TRUE,
  106.                     LABT_ExtraFat,    TRUE,
  107.                 TAG_DONE);
  108.  
  109.                 LT_New(Handle,
  110.                     LA_Type,        BUTTON_KIND,
  111.                     LA_LabelID,        MSG_IMPORTPANEL_APPEND_RATES_GAD,
  112.                     LA_ID,            GAD_APPEND,
  113.                     GA_Disabled,    TRUE,
  114.                     LABT_ExtraFat,    TRUE,
  115.                 TAG_DONE);
  116.  
  117.                 LT_New(Handle,
  118.                     LA_Type,        BUTTON_KIND,
  119.                     LA_LabelID,        MSG_GLOBAL_CANCEL_GAD,
  120.                     LA_ID,            GAD_CANCEL,
  121.                     LABT_EscKey,    TRUE,
  122.                     LABT_ExtraFat,    TRUE,
  123.                 TAG_DONE);
  124.  
  125.                 LT_EndGroup(Handle);
  126.             }
  127.  
  128.             LT_EndGroup(Handle);
  129.         }
  130.  
  131.         if(PanelWindow = LT_Build(Handle,
  132.             LAWN_TitleID,        MSG_IMPORTPANEL_IMPORT_RATES_TXT,
  133.             LAWN_HelpHook,        &GuideHook,
  134.             LAWN_Parent,        Parent,
  135.             WA_DepthGadget,        TRUE,
  136.             WA_DragBar,            TRUE,
  137.             WA_RMBTrap,            TRUE,
  138.             WA_Activate,        TRUE,
  139.             WA_SimpleRefresh,    TRUE,
  140.         TAG_DONE))
  141.         {
  142.             struct IntuiMessage    *Message;
  143.             BOOL                 Done;
  144.             ULONG                 MsgClass;
  145.             UWORD                 MsgCode;
  146.             struct Gadget        *MsgGadget;
  147.             PhoneNode            *Node;
  148.             BOOL                 SkipFirst;
  149.  
  150.             GuideContext(CONTEXT_IMPORT);
  151.  
  152.             LT_ShowWindow(Handle,TRUE);
  153.  
  154.             PushWindow(PanelWindow);
  155.  
  156.             Done = FALSE;
  157.             SkipFirst = TRUE;
  158.  
  159.             do
  160.             {
  161.                 if(Wait(PORTMASK(PanelWindow->UserPort) | SIG_BREAK) & SIG_BREAK)
  162.                     break;
  163.  
  164.                 while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  165.                 {
  166.                     MsgClass    = Message->Class;
  167.                     MsgCode        = Message->Code;
  168.                     MsgGadget    = (struct Gadget *)Message->IAddress;
  169.  
  170.                     LT_ReplyIMsg(Message);
  171.  
  172.                     if(MsgClass == IDCMP_GADGETUP)
  173.                     {
  174.                         switch(MsgGadget->GadgetID)
  175.                         {
  176.                             case GAD_LIST:
  177.  
  178.                                 Node = (PhoneNode *)GetListNode(MsgCode,PhoneList);
  179.  
  180.                                 LT_SetAttributes(Handle,GAD_REPLACE,
  181.                                     GA_Disabled,    Node->Entry == Entry,
  182.                                 TAG_DONE);
  183.  
  184.                                 LT_SetAttributes(Handle,GAD_APPEND,
  185.                                     GA_Disabled,    Node->Entry == Entry,
  186.                                 TAG_DONE);
  187.  
  188.                                 break;
  189.  
  190.                             case GAD_REPLACE:
  191.  
  192.                                 FreeTimeDateList(TimeDateList);
  193.  
  194.                                     /* Don't skip the default settings. */
  195.  
  196.                                 SkipFirst = FALSE;
  197.  
  198.                                 /* Falls through to... */
  199.  
  200.                             case GAD_APPEND:
  201.  
  202.                                 CopyTimeDateList((struct List *)&Node->Entry->TimeDateList,TimeDateList,SkipFirst);
  203.  
  204.                                 MadeChanges = TRUE;
  205.  
  206.                                 /* Falls through to... */
  207.  
  208.                             case GAD_CANCEL:
  209.  
  210.                                 Done = TRUE;
  211.                                 break;
  212.                         }
  213.                     }
  214.                 }
  215.             }
  216.             while(!Done);
  217.  
  218.             PopWindow();
  219.         }
  220.  
  221.         LT_DeleteHandle(Handle);
  222.     }
  223.  
  224.     DeleteList(PhoneList);
  225.  
  226.     return(MadeChanges);
  227. }
  228.